package fisio.control;

import java.io.IOException;
import java.util.Vector;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import fisio.global.Const;
import fisio.global.Util;
import fisio.model.EntradaLivroCaixa;
import fisio.model.Fisioterapeuta;
import fisio.service.ServicoCaixa;

public class EntradaLivroCaixaServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {	
		
		String op = request.getParameter("op");
		
		if(op != null) {
			
			if(op.equals("listar")) {
				
				Vector<EntradaLivroCaixa> temp = ServicoCaixa.getEntradas();

				JSONArray array = new JSONArray();
				
				for(int i = 0; i < temp.size(); i++)
					array.add(temp.get(i).toJSON());
				
				request.getSession().setAttribute("tabAtiva", "#tabLivroCaixa");
				//request.getSession().setAttribute("pagina", request.getSession().getAttribute("pagina"));
				response.setContentType("application/json");
				response.getWriter().print(array);
				
			}  else if(op.equals("editar")) {
				
				String id = request.getParameter("id");
				Fisioterapeuta f = (Fisioterapeuta)request.getSession().getAttribute("usuario");
				EntradaLivroCaixa c = ServicoCaixa.getEntrada(Integer.parseInt(id));
				if((f.getId() == c.getIdF()) || f.temPerfilAdmin()){
					request.setAttribute("entrada", c);
					request.getRequestDispatcher(Const.JSP_CAD_ENTRADA).forward(request, response);
				}else{					
					response.sendRedirect(Const.CONTEXT);
				}
				
			} else
				response.sendRedirect(Const.CONTEXT);
			
		} else
			response.sendRedirect(Const.CONTEXT);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
		
		String op = request.getParameter("op");
		
		if(op != null) {
			
			Fisioterapeuta f = (Fisioterapeuta)request.getSession().getAttribute("usuario");
			
			if(op.equals("deletar") && f.temPerfilAdmin()) {
				
				String id = request.getParameter("id");
				ServicoCaixa.deleteEntrada(Integer.parseInt(id));
				return;
				
			}
			
			String id_f = request.getParameter("id_f");
			String id_p = request.getParameter("id_p");
			boolean check_p = Boolean.parseBoolean(request.getParameter("check_pac"));
			String data = request.getParameter("data");
			String descricao = request.getParameter("descricao");
			boolean operacao = request.getParameter("tipo_transacao").equals("credito")?true:false;
			Double valor = Double.parseDouble(request.getParameter("valor"));
			valor = operacao?valor:-valor;
			
			if(op.equals("editar")) {
				
				int id = Integer.parseInt(request.getParameter("id"));
				if(id == f.getId() || f.temPerfilAdmin()) {
					ServicoCaixa.updateEntrada(id, new EntradaLivroCaixa(Integer.parseInt(id_f),(check_p)?Integer.parseInt(id_p):(-1),Util.convertStringToDateUtil(data),descricao,valor));
					response.sendRedirect(Const.PAGE_HOME_LOGADO);
				}
			} else if (op.equals("cadastrar")){
				
				ServicoCaixa.insertCaixa(new EntradaLivroCaixa(Integer.parseInt(id_f),(check_p)?Integer.parseInt(id_p):(-1),Util.convertStringToDateUtil(data),descricao,valor));
				response.sendRedirect(Const.PAGE_HOME_LOGADO);
			
			} else
				response.sendRedirect(Const.CONTEXT);
			
		} 
	}
}
